package com.lazily.annotation_;


import java.lang.annotation.ElementType;
import java.lang.annotation.Target;

/**
 * @Author:  GZQ
 * @date:  2025/2/17 22:11
 * @description: 注解的理解
 * 1. @Override 注解的案例演示
 */

public class Override_ {

	// 程序入口
	public static void main(String[] args) {

	}
}

class Father { // 父类
	public void fly() {
		System.out.println("Father fly....");
	}

	public void say() {

	}
}


class Son extends Father { // 子类
	// 1. @Override 注解放在fly方法上, 表示子类的fly方法重写时重写了父类的fly
	// 2. 这里如果没有写 @Override 还是重写了父类fly
	// 3. 如果你写了 @Override注解, 编译器就会去检查该方法是否真的重写了父类的方法，
	// 如果的确重写了, 则编译通过, 如果没有构成重写,则编译错误
	// 4. 看看 @Override的定义
	// 如果发现 @interface 表示一个 注解类
	/*
		@Target(ElementType.METHOD)
		@Retention(RetentionPolicy.SOURCE)
		public @interface Override {
		}
	* */
	@Override			// 说明
	public void fly() {
		System.out.println("Son fly....");
	}

	@Override
	public void say() {

	}
}

// 小结:
// Override 使用说明
// @Override 表示指定重写父类的方法(从编译层面验证)，如果父类没有fly方
// 法，则会报错
// 		如果不写@Override 注解,而父类仍有 public void fly(){}，仍然构成重写
// 不能修饰其它类，包，属性等等
// @Override 只能修饰方法，
// 查看@Override注解源码为 @Target(ElementType.METHOD),说明只能修饰
// 4.
// 方法
// @Target 是修饰注解的注解， 称为元注解,记住这个概念.